Чтобы решить проблему с CORS в вашем приложении NestJS, нужно настроить middleware для обработки CORS. Вот как можно это сделать в вашем коде:
Обновленный код с настройкой CORS
typescript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | import { NestFactory } from '@nestjs/core'; import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; import { AppModule } from './app.module'; async function bootstrap() { const app = await NestFactory.create(AppModule); // Включение CORS app.enableCors({ origin: 'http://localhost:3001', // Разрешить запросы только с этого домена methods: 'GET,HEAD,PUT,PATCH,POST,DELETE', // Разрешенные методы credentials: true, // Если нужно передавать куки }); // Настройка Swagger const config = new DocumentBuilder() .setTitle('Documents API') .setDescription('API для работы с документами') .setVersion('1.0') .addTag('documents') .build(); const document = SwaggerModule.createDocument(app, config); SwaggerModule.setup('api', app, document); await app.listen(process.env.PORT ?? 3000); } bootstrap(); |
Что изменено:
- Добавлено
app.enableCors
:- Метод
enableCors
включает поддержку CORS в приложении. - Параметр
origin
указывает, с каких доменов разрешены запросы. В данном случае разрешены запросы сhttp://localhost:3001
. - Параметр
methods
определяет, какие HTTP-методы разрешены. - Параметр
credentials
разрешает передачу куки и других учетных данных.
- Метод
- Swagger остался без изменений:
- Swagger используется для документирования API и не влияет на CORS.
Пример запроса
После включения CORS, запросы с http://localhost:3001
к вашему серверу на http://127.0.0.1:3000
больше не будут блокироваться.Пример GET-запроса:
javascript
1 2 3 4 5 6 7 8 9 | method: 'GET', headers: { 'Content-Type': 'application/json', }, }) .then((response) => response.json()) .then((data) => console.log(data)) .catch((error) => console.error('Ошибка:', error)); |
Рекомендации:
- Для разработки:
- Разрешите запросы с любого домена, используя
origin: '*'
. Это удобно для тестирования, но не рекомендуется для продакшена.
app.enableCors({ origin: '*', });
- Разрешите запросы с любого домена, используя
- Для продакшена:
- Ограничьте доступ только к доверенным доменам.
- Убедитесь, что сервер возвращает правильные заголовки CORS.
- Проверка CORS:
- Если проблема сохраняется, убедитесь, что ваш браузер не кэширует старые заголовки. Очистите кэш или используйте режим инкогнито.